package JVM相关知识;

/**
 * @author coderFu
 * @create 2021/12/24
 */
public class ByteCodeAnalysisDemo {

    public static void main(String[] args){
//        System.out.println("Hello World！");
        int a= 10, b=20;
        a  = a+ b;
        System.out.println(a);
    }
    /**
     * load 操作 aLoad_0 的理解： a表示类型，load表示操作store操作，
     * 即，将局部变量表中的某个元素复制到操作数栈栈顶，即操作数栈入栈
     * 操作，操作数栈元素个数+1.局部变量表数目不变
     */

    /**
     * store 操作 将操作数栈栈顶元素出栈并放入指定的局部变量slot中，局部变量表要记录
     * 即，操作数栈出栈操作，操作数栈元素数据-1，局部变量表中数目+1
     */

    /**
     * invokeSpecial 调用方法的字节码：调用构造函数，私有方法，父类方法都是用invokeSpecial
     */

    /**
     * return 表示构造器返回，如果有整形返回值  ireturn
     */

    /**
     * LineNumberTable 表示行号表：存放方法的行号信息 line  3 0 表示
     * java代码中第三行对应的是Code代码块中偏移地址为0这句。
     */

    /**
     * LocalVariableTable ：  局部变量表，存放方法的局部变量信息
     * Start Length Slot  Name Signature
     * 0       5       0   this  LTest
     * Start 开始位置
     * Length 这里5表示长度 ， 局部变量表的长度
     * Slot 存储在局部变量表中的的容量 第几个槽
     * Name 表示局部变量名  这里是this
     * Signature 局部变量类型，
     *
     * 在JVM中，非static方法  第0位索引的slot默认是用于传递方法所属对象实例的引用。
     */

    /**
     * invokeVirtual 调用虚方法（普通的java方法）
     */



}
